home *** CD-ROM | disk | FTP | other *** search
- ;;; Don't try this program a February 29!!!!!!!
-
- (set! *load-path* (cons ".." *load-path*))
- (require "blt")
- (require "hash")
-
- (option 'add "*Calendar.Frame.borderWidth" 2)
- (option 'add "*Calendar.Frame.relief" "raised")
- (option 'add "*Calendar.Label.font" "*-Helvetica-Bold-R-*-14-*")
- (option 'add "*Calendar*background" "steelblue")
- (option 'add "*Calendar*foreground" "white")
-
- (define monthinfo '((Jan "January" 31)
- (Feb "February" 28)
- (Mar "March" 31)
- (Apr "April" 30)
- (May "May" 31)
- (Jun "June" 30)
- (Jul "July" 31)
- (Aug "August" 31)
- (Sep "September" 30)
- (Oct "October" 31)
- (Nov "November" 30)
- (Dec "December" 31)))
-
- (define abbrDays '(Sun Mon Tue Wed Thu Fri Sat))
-
- (define (Calendar weekday month day)
- (let ((wkdayOffset (- 7 (length (member weekday abbrDays))))
- (dayOffset (modulo (- day 1) 7))
- (info (assoc month monthinfo))
- (wkday 0))
-
- (if (< wkdayOffset dayOffset) (set! wkdayOffset (+ 7 wkdayOffset)))
-
- ;; Title
- (frame '.calendar :class "Calendar")
- (label '.calendar.month :text (cadr info)
- :font "*-New*Century*Schoolbook-Bold-R-*-18-*")
- (blt_table .calendar .calendar.month "1,1" :cspan 7)
-
- ;; Week days label
- (frame '.calendar.weekframe :relief "sunken" :bd 2)
- (blt_table .calendar .calendar.weekframe "2,0" :columnspan 8 :fill "both")
-
- (let loop ((cnt 1) (days abbrDays))
- (let ((widget-name (& .calendar "." (car days))))
- (label widget-name :text (car days)
- :font "*-New*Century*Schoolbook-Bold-R-*-14-*")
- (blt_table .calendar widget-name
- (format #f "2,~s" cnt) :pady 2 :padx 2)
- (if (< cnt 7) (loop (+ cnt 1) (cdr days)))))
-
- (blt_table 'column .calendar 'configure 'all :padx 4)
- (blt_table 'column .calendar 'configure 0 :width 0)
- (blt_table 'row .calendar 'configure 2 :pady 4)
-
- ;; Days
- (do ((week 0)(numdays (caddr info))
- (cnt 1 (+ cnt 1))
- (wkday (+ 1 (- wkdayOffset dayOffset)) (+ wkday 1)))
- ((> cnt numdays))
-
- (label (& ".calendar.day" cnt):text cnt :bd 3 :relief (if (= cnt day)
- "ridge"
- "flat"))
- (blt_table .calendar (& ".calendar.day" cnt)
- (format #f "~A,~A" (+ week 3) wkday)
- :fill "both")
-
- (when (= wkday 7)
- (set! week (+ week 1))
- (set! wkday 0)))
-
- (pack .calendar :expand #t :fill "both")))
-
- (wm 'minsize *root* 0 0)
- (wm 'maxsize *root* 1000 1000)
-
- (with-input-from-file "| date" (lambda () (Calendar (read) (read) (read))))
-
-
-
-